// Promise对象，就可以将异步操作以同步操作的流程表达出来，避免了层层嵌套的回调函数。
// Promise对象提供统一的接口，使得控制异步操作更加容易
var promise=new  Promise(function(resolve,reject){
    // 异步代码
    // resolve成功的处理方式，reject失败的处理方式
    if(/*成功*/true){
        resolve(data);
    }else{
        reject(error)
    }
})

promise.then(function(data){
    // 成功
    console.log(data);
},function(error){
    // 失败
    console.log(error);
})


// 实例
// function loadImageAsync(url) {
//     var promise = new Promise(function (resolve, reject) {
//       const image = new Image();
//       image.onload = function () {
//         resolve(image);
//        };
//       image.onerror = function () {
//         reject(new Error('Could not load image at ' + url));
//        };
//       image.src = url;
//      });
//     return promise;
//    }
//   loadImageAsync("http://iwenwiki.com/api/vue-data/vue-data-1.png")
//    .then(function(data){
//     console.log(data);
//     $("div").append(data)
//    },function(error){
//     $("div").html(error)
//    })


// 方法
// then方法返回的是一个新的Promise实例。因此可以采用链式写法，即then方法后面再调用另一个then方法
// catch()方法是.then(null, rejection)或.then(undefined, rejection)的别名，用于指定发生错误时的回调函数
// finally()方法用于指定不管 Promise 对象最后状态如何，都会执行的操作。该方法是 ES2018 引入标准的
// Promise.all()方法用于将多个 Promise 实例，包装成一个新的 Promise 实例,优点就是多个promise都有结果，才会触发then或者catch
// var url1 = "http://iwenwiki.com/api/musicimg/1.png"
// var url2 = "http://iwenwiki.com/api/musicimg/2.png"
// var promise1 = new Promise(function (resolve, reject) {
//   var image = new Image();
//   image.src = url1;
//   image.onload = function () {
//     resolve(image)
//    }
//   image.onerror = function () {
//     reject(new Error('Could not load image at ' + url1))
//    }
// })
// var promise2 = new Promise(function (resolve, reject) {
//   var image = new Image();
//   image.src = url2;
//   image.onload = function () {
//     resolve(image)
//    }
//   image.onerror = function () {
//     reject(new Error('Could not load image at ' + url2))
//    }
// })

// Promise.all([promise1,promise2]).then(data =>{
//   console.log(data);
// }).catch(error =>{
//   console.log(error);
// })
